package org.example.flea_market_mvc.entity;

import com.baomidou.mybatisplus.annotation.*;
import jdk.jfr.Category;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 商品
 *
 * @author chensanju
 * @date 2025-06-10 12:50:34
 */
@Data
@TableName("products")
public class Products {

    /**
     * 商品ID，主键自增
     */
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 商品名称
     */
    private String name;

    /**
     * 商品价格，使用BigDecimal避免精度问题
     */
    private BigDecimal price;

    /**
     * 原始价格（用于显示折扣）
     */
    private BigDecimal originalPrice;

    /**
     * 商品详细描述
     */
    private String description;

    /**
     * 商品分类ID，外键关联categories表
     */
    private Integer categoryId;

    /**
     * 卖家用户ID，外键关联users表
     */
    private Integer sellerId;

    /**
     * 商品库存
     */
    private Integer stock;

    /**
     * 已售数量
     */
    private Integer soldCount;

    /**
     * 浏览量
     */
    private Integer viewCount;

    /**
     * 商品过期时间，NULL表示永不过期
     */
    private LocalDateTime expireTime;

    /**
     * 商品状态：1-上架，2-下架，3-审核中，4-已过期，5-已删除（逻辑删除）
     */
    @TableLogic // 逻辑删除字段
    private Integer status;

    /**
     * 商品图片URL列表，用逗号分隔
     */
    private String images;

    /**
     * 商品主图（从images中提取第一个作为主图）
     */
    private String mainImage;

    /**
     * 商品标签（如"99新","包邮","可议价"）
     */
    private String tags;

    /**
     * 商品评分（基于评价自动计算）
     */
    private Double rating;

    /**
     * 评价数量
     */
    private Integer reviewCount;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 最后交易时间（用于排序）
     */
    private LocalDateTime lastTransactionTime;

    /**
     * 地理位置（卖家发货地）
     */
    private String location;

    /**
     * 商品属性JSON（如尺寸、颜色等）
     */
    private String attributes;

    private boolean is_deleted;
    // 非数据库字段（用于业务关联）
    @TableField(exist = false)
    private List<String> imageList; // 图片列表（自动解析images字段）

    @TableField(exist = false)
    private User seller; // 卖家信息

    @TableField(exist = false)
    private Category category; // 分类信息

    @TableField(exist = false)
    private Boolean isFavorite; // 是否被当前用户收藏
}